

#ifndef ORBITALELEMENTS_H
#define ORBITALELEMENTS_H

#include "util.h"
#include "datetime.h"

namespace libsgp4
{

class Tle;

/**
 * @brief The extracted orbital elements used by the SGP4 propagator.
 */
class OrbitalElements
{
public:
    explicit OrbitalElements(const Tle& tle);

    /*
     * XMO,平均近点角
     */
    double MeanAnomoly() const
    {
        return mean_anomoly_;
    }

    /*
     * XNODEO，升交点赤经
     */
    double AscendingNode() const
    {
        return ascending_node_;
    }

    /*
     * OMEGAO，近地点幅角
     */
    double ArgumentPerigee() const
    {
        return argument_perigee_;
    }

    /*
     * EO，轨道偏心率
     */
    double Eccentricity() const
    {
        return eccentricity_;
    }

    /*
     * XINCL，轨道倾角
     */
    double Inclination() const
    {
        return inclination_;
    }

    /*
     * XNO，平均角速度
     */
    double MeanMotion() const
    {
        return mean_motion_;
    }

    /*
     * BSTAR， B* 阻力系数，大气阻力系数
     */
    double BStar() const
    {
        return bstar_;
    }

    /*
     * AODP，恢复的半长轴，实际上是一个经过摄动调整的值
     */
    double RecoveredSemiMajorAxis() const
    {
        return recovered_semi_major_axis_;
    }

    /*
     * XNODP，恢复的平均角速度，实际上是一个经过摄动调整的值
     */
    double RecoveredMeanMotion() const
    {
        return recovered_mean_motion_;
    }

    /*
     * PERIGE，近地点高度
     */
    double Perigee() const
    {
        return perigee_;
    }

    /*
     * Period in minutes，轨道周期
     */
    double Period() const
    {
        return period_;
    }

    /*
     * EPOCH，TLE数据参考的时间点
     */
    DateTime Epoch() const
    {
        return epoch_;
    }

private:
    double mean_anomoly_;
    double ascending_node_;
    double argument_perigee_;
    double eccentricity_;
    double inclination_;
    double mean_motion_;
    double bstar_;
    double recovered_semi_major_axis_;
    double recovered_mean_motion_;
    double perigee_;
    double period_;
    DateTime epoch_;
};

} // namespace libsgp4

#endif // ORBITALELEMENTS_H
